/**
 * @文件名称: menu.js
 * @功能描述: 系统枚举
 * @技术交流: 961179337(QQ群)
 * @编写作者: 骆振富
 * @开发日期: 2023年11月11日
 * @历史版本: V1.0 
 * @备注信息: 
 */
export class Enum {

  /**
   * 添加枚举字段
   * field: 枚举字段
   * label: 界面显示
   * value: 枚举值
   */
  add(field, label, value, item = "") {
    this[field] = { field, label, value, item }
    return this
  }

  /**
   * 根据枚举value获取其label
   */
  getLabelByValue(value) {
    // 字段不存在返回‘’
    if (value === undefined || value === null) {
      return ''
    }
    for (let i in this) {
      let e = this[i]
      if (e && e.value === value) {
        return e.label
      }
    }
    return ''
  }

  /**
   * 根据枚举label获取其value
   */
  getValueByLabel(label) {
    // 字段不存在返回‘’
    if (label === undefined || label === null) {
      return ''
    }
    for (let i in this) {
      let e = this[i]
      if (e && e.label === label) {
        return e.value
      }
    }
    return ''
  }

  /**
   * 根据枚举value获取其Item
   */
  getItemByValue(value) {
    // 字段不存在返回‘’
    if (value === undefined || value === null) {
      return ''
    }
    for (let i in this) {
      let e = this[i]
      if (e && e.value === value) {
        return e.item
      }
    }
    return ''
  }

  /**
   * 根据枚举value获取其Enum对象
   */
  getEnumByValue(value) {
    // 字段不存在返回‘’
    if (value === undefined || value === null) {
      return ''
    }
    for (let i in this) {
      let e = this[i]
      if (e && e.value === value) {
        return e
      }
    }
    return ''
  }

  /**
   * 获取label和value列表
   */
  getList() {
    let lst = [];
    for (let i in this) {
      let e = this[i];
      lst.push({label: e.label, value: e.value});
    }
    return lst;
  }

}

/**
 * 系统枚举导出类
 */
export class Enums {
  // 构造函数
  constructor() {

    this.OTHERS = new Enum()
      .add('OTHERS_NOPE', '否', 0)
      .add('OTHERS_YET', '是', 1)

    this.ENABLE_FLAG = new Enum()
      .add('ENABLE_NO', '未启用', 0)
      .add('ENABLE_IS', '已启用', 1)

    this.MENU_CATEGORY = new Enum()
      .add('CATEGORY_MENU', '普通菜单', 1)
      .add('CATEGORY_BUTTON', '菜单按钮', 2)

    this.FIELD_TYPE = new Enum()
      .add('FIELD_TYPE_CHAR', '字符类型', 0)
      .add('FIELD_TYPE_NUMBER', '数值类型', 1)

  }
}

